package com.tmxk.rbac.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

/**
 * MyBatis工具类
 */
public class MyBatisUtils {
    //定义SqlSessionFactory对象实例
    protected static SqlSessionFactory sqlSessionFactory = null;

    //创建SqlSession对象实例
    protected static SqlSession sqlSession = null;

    //静态加载MyBatis的核心配置文件
    static {
        //① 定义mybatis-config.xml的路径
        String config = "mybatis-config.xml";
        try{
            //②使用MyBatis提供的Resources资源类加载解析核心配置文件
            InputStream in = Resources.getResourceAsStream(config);
            //③获取sqlSessionFactory会话实例
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 开启数据库会话
     * 根据SqlSession对象提供的一系列操作数据库的方法,创建SqlSession对象,并定义事务提交方式
     * @param isCommit 事务提交方式,默认false 手动提交, true 自动提交
     * @return
     */
    public static SqlSession createSqlSession(boolean isCommit){
        sqlSession = sqlSessionFactory.openSession(isCommit);
        return sqlSession ;
    }

    /**
     * 关闭数据库会话
     */
    public static void closeSqlSession(){
        if(sqlSession!=null){
            sqlSession.close();
        }
    }
}
